<?php
/**
 * Vue sur la BDD - Usage du pattern Singleton
 * Effectue les requetes et les renvoie au bddManager pour traitement
 */
class BddView{
	/**
	 * Instance du pattern
	 */
	private static $_instance = null;

	/**
	 * Pour se co a la bdd
	 */
	private $server;
	/**
	 * Pour se co a la bdd
	 */
	private $psswd;
	/**
	 * Pour se co a la bdd
	 */
	private $login;
	/**
	 * Sauvegarde de la connection, pour ne pas la refaire à chaque fois !
	 */
	private $pdo_save;


	/**
	 * Constructeur
	 */
	private function __construct(){
		$server = 'localhost';
		$psswd = 'root';
		$login = 'root';

	}

	/**
	 * Pattern Singleton
	 */
	public static function getInstance() {
		if(is_null(self::$_instance)) {
			self::$_instance = new BddView();
		}
		return self::$_instance;
	}

	/**
	 * Fonction pour se connecter à la base de donnée
	 @param $nomBase nom de la base de donnee
	 */
	public function connectBdd($nomBase){
		try {

			$pdo = new PDO('mysql:host=localhost;dbname='.$nomBase, 'root', 'root');
			$this->pdo_save = $pdo;
			
			return $pdo ;

		}catch( PDOException $Exception ) {
			echo 'Erreur connexion base de donnee \n';
			throw new MyDatabaseException( $Exception->getMessage( ) , 	$Exception->getCode( ) );
		}

	}

	/**
	 * Retourne, pour un id de Cookbook, les commentaires qui lui sont associés (retourne la requete effecutee)
	 * @param idCookBook id du cookbook
	 */
	public function getComments($idCookBook){

		$sql = 'SELECT * FROM Comments WHERE IDCookBook = "'.$idCookBook.'" ORDER BY Date ASC';

		try{
			$req = $this->pdo_save->query($sql);
		}catch (Exception $e) {
			echo 'Exception reçue : ',  $e->getMessage(), "\n";
		}

		//libere dans cookbook
		return $req;
	}

	/**
	 * Insere un commentaire dans la base de donnee pour un cookbook
	 * @param unknown_type $cookBookID
	 * @param Comment $comment
	 */
	public function insertComment($cookBookID,Comment $comment){
		$textComment = $comment->getTextComment();
		$pseudo = $comment -> getPseudo();
		$psswd = $comment -> getPsswd();

		$sql = 'INSERT INTO Comments(Date,Contenu,Pseudo,IDCookBook,Password) VALUES ("'.date('Y-m-d H:i:s').'","'.$textComment.'","'.$pseudo.'","'.$cookBookID.'","'.$psswd.'")';

		try{
			$req = $this->pdo_save->query($sql);
		}catch (Exception $e) {
			echo 'Exception reçue : ',  $e->getMessage(), "\n";
		}
		$req->closeCursor();
	}

	/**
	 * Supprime un commentaire, dans la base de donnee, pour un cookbook
	 * @param unknown_type $cookBookID
	 * @param Comment $comment
	 */
	public function removeComment($cookBookID,Comment $comment){
		$sql = 'DELETE FROM Comments WHERE IDComments = "'.$comment->getID().'" AND IDCookBook = "'.$cookBookID.'"';

		try{
			$req = $this->pdo_save->query($sql);
		}catch (Exception $e) {
			echo 'Exception reçue deletion cookbook: ',  $e->getMessage(), "\n";
		}
		$req->closeCursor();
	}

	/**
	 * Retourne la requete resultante de la selection de tous les cookbooks
	 */
	public function getAllCookbooks(){
		$sql = 'SELECT * FROM Cookbook';

		try{
			$req = $this->pdo_save->query($sql);
		}catch (Exception $e) {
			echo 'Exception reçue getAllCookbook: ',  $e->getMessage(), "\n";
		}

		return $req;
	}
	
	public function getAllCookbookParam($param){
		$sql = 'SELECT * FROM Cookbook WHERE Categorie = "'.$param.'"';
		
		try{
			$req = $this->pdo_save->query($sql);
		}catch (Exception $e) {
			echo 'Exception reçue getAllCookbook: ',  $e->getMessage(), "\n";
		}
		
		return $req;
	}

	/**
	 * Retourne la requete resultant de la recuperation pour un cookbook de sa recette
	 * @param unknown_type $cookBookID
	 * @param unknown_type $numeroRecette numero de recette choisi
	 */
	public function getRecipe($cookBookID,$numeroRecette){
		$sql = 'SELECT * FROM Recipes WHERE NumeroRecette ="'.$numeroRecette.'" AND IDCookBook ="'.$cookBookID.'"';

		try{
			$req = $this->pdo_save->query($sql);
		}catch (Exception $e) {
			echo 'Exception reçue getRecipe cookbook: ',  $e->getMessage(), "\n";
		}

		//return the row in the DB
		return $req;
	}

	/** 
	 * Retourne pour un cookbook la requete resultant de la selection de toutes ses recettes
	 * La requete trie les recettes selon leur numero croissant
	 * @param unknown_type $cookBookID
	 */
	public function getAllRecipe($cookBookID){
		$sql = 'SELECT * FROM Recipes Where IDCookBook ="'.$cookBookID.'" ORDER BY NumeroRecette ASC';

		try{
			$req = $this->pdo_save->query($sql);
		}catch (Exception $e) {
			echo 'Exception reçue getAllRecipe: ',  $e->getMessage(), "\n";
		}
		
		return $req;
	}
}

?>
